/*
 * Copyright (c) 2016. 恒昌互联网运营中心.
 */
package com.credithc.eagleeye.vo;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;
/**
 * 描 述: 分布式SOA服务调用栈信息<br/>
 * 作 者: zhangjin<br/>
 * 创 建：2016年06月01日<br/>
 * 版 本：v1.0.0<br>
 * <p/>
 * 历 史: (版本) 作者 时间 注释 <br/>
 */
public class RpcTraceInfoVo {
    /**
     * 最大参数2MB
     */
    private static final int LIMIT_MAX_PARAMETER_SIZE = 2 * 1024 * 1024;
    /**
     * rpc跟踪ID
     */
    private String traceId;
    /**
     * rpc调用次序号
     */
    private String rpcId;
    /**
     * rpc类型（ICE,WS,HTTP,JDBC,Redis等）
     */
    private String rpcType;
    /**
     * 调用方(客户端)系统名称
     */
    private String clientName;
    /**
     * 服务类别
     */
    private String serviceCategory;
    /**
     * 接口名称
     */
    private String serviceName;
    /**
     * 方法名称
     */
    private String methodName;
    /**
     * 服务器地址
     */
    private String serverHost;
    /**
     * 客户端地址
     */
    private String clientHost;
    /**
     * 请求时间
     */
    private String requestDateTime;
    /**
     * 处理结果：OK,ERROR
     */
    private String result;
    /**
     * 返回结果
     */
    private String responseJson;
    /**
     * 运行时间(毫秒)
     */
    private long runTime;
    /**
     * 运行环境
     */
    private String env;
    /**
     * 请求参数
     */
    private String requestJson;
    /**
     * 用户信息
     */
    private Map<String,String> userInfo;
    /**
     * 平台名称
     */
    private String platformName;
    /**
     * 请求值大小
     */
    private long requestSize;
    /**
     * 返回值大小
     */
    private long responseSize;
    /**
     * 获取
     * rpc跟踪ID

     * @return traceId
     */
    public String getTraceId() {
        return traceId;
    }
    /**
     * 设置
     * rpc跟踪ID

     * @param traceId
     */
    public void setTraceId(String traceId) {
        this.traceId = traceId;
    }
    /**
     * 获取
     * rpc调用次序号

     * @return rpcId
     */
    public String getRpcId() {
        return rpcId;
    }
    /**
     * 设置
     * rpc调用次序号

     * @param rpcId
     */
    public void setRpcId(String rpcId) {
        this.rpcId = rpcId;
    }
    /**
     * 获取
     * rpc类型（ICE,WS,HTTP,JDBC,Redis等）

     * @return rpcType
     */
    public String getRpcType() {
        return rpcType;
    }
    /**
     * 设置
     * rpc类型（ICE,WS,HTTP,JDBC,Redis等）

     * @param rpcType
     */
    public void setRpcType(String rpcType) {
        this.rpcType = rpcType;
    }
    /**
     * 获取
     * 服务类别

     * @return serviceCategory
     */
    public String getServiceCategory() {
        return serviceCategory;
    }
    /**
     * 设置
     * 服务类别

     * @param serviceCategory
     */
    public void setServiceCategory(String serviceCategory) {
        this.serviceCategory = serviceCategory;
    }
    /**
     * 获取
     * 接口名称

     * @return serviceName
     */
    public String getServiceName() {
        return serviceName;
    }
    /**
     * 设置
     * 接口名称

     * @param serviceName
     */
    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }
    /**
     * 获取
     * 方法名称

     * @return methodName
     */
    public String getMethodName() {
        return methodName;
    }
    /**
     * 设置
     * 方法名称

     * @param methodName
     */
    public void setMethodName(String methodName) {
        this.methodName = methodName;
    }
    /**
     * 获取
     * 服务器地址

     * @return serverHost
     */
    public String getServerHost() {
        return serverHost;
    }
    /**
     * 设置
     * 服务器地址

     * @param serverHost
     */
    public void setServerHost(String serverHost) {
        this.serverHost = serverHost;
    }
    /**
     * 获取
     * 客户端地址

     * @return clientHost
     */
    public String getClientHost() {
        return clientHost;
    }
    /**
     * 设置
     * 客户端地址

     * @param clientHost
     */
    public void setClientHost(String clientHost) {
        this.clientHost = clientHost;
    }
    /**
     * 获取
     * 请求时间

     * @return requestDateTime
     */
    public String getRequestDateTime() {
        return requestDateTime;
    }
    /**
     * 设置
     * 请求时间

     * @param requestDateTime
     */
    public void setRequestDateTime(String requestDateTime) {
        this.requestDateTime = requestDateTime;
    }
    /**
     * 获取
     * 处理结果：OK,ERROR

     * @return result
     */
    public String getResult() {
        return result;
    }
    /**
     * 设置
     * 处理结果：OK,ERROR

     * @param result
     */
    public void setResult(String result) {
        this.result = result;
    }
    /**
     * 获取
     * 返回结果

     * @return responseJson
     */
    public String getResponseJson() {
        return responseJson;
    }
    /**
     * 设置
     * 返回结果

     * @param responseJson
     */
    public void setResponseJson(String responseJson) {
        //限制2MB
        this.responseJson = StringUtils.left(responseJson,LIMIT_MAX_PARAMETER_SIZE);
        this.responseSize=(responseJson == null ? 0 : responseJson.getBytes().length);
        if (this.responseSize > LIMIT_MAX_PARAMETER_SIZE) {
            this.responseJson += "......";
        }
    }
    /**
     * 获取
     * 运行时间(毫秒)

     * @return runTime
     */
    public long getRunTime() {
        return runTime;
    }
    /**
     * 设置
     * 运行时间(毫秒)

     * @param runTime
     */
    public void setRunTime(long runTime) {
        this.runTime = runTime;
    }
    /**
     * 获取
     * 运行环境

     * @return env
     */
    public String getEnv() {
        return env;
    }
    /**
     * 设置
     * 运行环境

     * @param env
     */
    public void setEnv(String env) {
        this.env = env;
    }
    /**
     * 获取
     * 请求参数

     * @return requestJson
     */
    public String getRequestJson() {
        return requestJson;
    }
    /**
     * 设置
     * 请求参数

     * @param requestJson
     */
    public void setRequestJson(String requestJson) {
        //限制32KB
        this.requestJson = StringUtils.left(requestJson,LIMIT_MAX_PARAMETER_SIZE);
        this.requestSize=(requestJson == null ? 0 : requestJson.getBytes().length);
        if (this.requestSize > LIMIT_MAX_PARAMETER_SIZE) {
            this.requestJson += "......";
        }
    }

    /**
     * 获取 调用方(客户端)系统名称
     * @return systemName
     */
    public String getClientName() {
        return clientName;
    }
    /**
     * 设置 调用方(客户端)系统名称
     * @param clientName
     */
    public void setClientName(String clientName) {
        this.clientName = clientName;
    }

    public Map<String, String> getUserInfo() {
        return userInfo;
    }
    public void setUserInfo(Map<String, String> userInfo) {
        this.userInfo = userInfo;
    }
    public String getPlatformName() {
        return platformName;
    }
    public void setPlatformName(String platformName) {
        this.platformName = platformName;
    }
    public void setRequestSize(long requestSize) {
        this.requestSize = requestSize;
    }
    public void setResponseSize(long responseSize) {
        this.responseSize = responseSize;
    }
    public long getRequestSize() {
        return requestSize;
    }
    public long getResponseSize() {
        return responseSize;
    }
}
